package _14_Interface;
/**
 * 引用数据类型 : 类,数组,接口
 * 
 * 接口中是抽象方法的集合,只是定义功能,不实现功能,用于让实现类去实现功能
 * 
 * 接口是一种引用数据类型,可以看做是一种特殊的抽象类,完全抽象,一个类只能继承一个父类
 * 但是可以实现多个接口
 * 
 * 接口和接口之间是多继承,用逗号隔开 extends xx,xxx,xxxx
 * 
 * 类和接口之间是多实现,用逗号隔开  implements xx,xxx,xxxx
 * 
 * 声明方式由 class 变成了 interface
 * 
 * 语法 : 
 * [修饰符] interface 接口名 {}
 * 
 * 1.7只有抽象方法
 * 1.8开始可以有静态可以有 default (可以理解为成员方法,实现类可以调用可以覆写)
 * 		静态方法,使用接口名调用就行
 * 1.9开始支持 private 方法
 * 
 * 但是接口中不支持成员变量,一般是 static 和 final 并且 public static final可以省略
 * 
 * 接口中抽象方法不需要加 abstract 也不需要加 public 因为默认就是
 * 
 * 接口没有构造方法,不能实例化对象
 * 
 * 一个抽象类实例化接口,可以实现 0~N个 抽象方法
 * 一个非抽象类实现接口,需要实现所有的抽象方法
 * 
 * abstract 和 interface 的区别?
 * 
 * @author lenovo
 * @Date 2020年7月11日
 * @Time 下午6:44:02
 */
public class Interface_01 {

	public static void main(String[] args) {
		System.out.println(A.i);
		A.m1();
		E e = new E();
		e.m3();
//		2
//		-=---
//		-----

	}

}

interface A {
	// 都是静态常量
	public static final String SUCCESS = "SUCCESS";
	int i = 2;
	byte MAX_VALUE = 127;

	public static void m1() {
		System.out.println("-=---");
	}

	public default void m3() {
		System.out.println("-----");
	}

	public abstract void m2();
}

interface B {
	void m4();
}

//多继承
interface C extends A, B {
	void m5();
}

//抽象类实现 0~N 个抽象方法
abstract class D implements A, B {

}

class E implements C {

	@Override
	public void m2() {
		// TODO Auto-generated method stub

	}

	@Override
	public void m4() {
		// TODO Auto-generated method stub

	}

	@Override
	public void m5() {
		// TODO Auto-generated method stub

	}

}